/**
 * @author 0283000115
 * @date 2017年12月28日-下午4:58:00
 */
package com.zte.claa.inficombo.csa.app.service.token.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.zte.claa.inficombo.csa.app.service.token.CSAToken;
import com.zte.claa.inficombo.csa.app.service.token.CSATokenService;
import com.zte.claa.inficombo.csa.app.util.JsonUtils;
import com.zte.claa.inficombo.csa.app.util.SecurityUtil;


/**
 * @author 0283000115
 *
 */

@Service
public class CSATokenServiceImpl implements CSATokenService {
	// 日志
	private Logger logger = LoggerFactory.getLogger(CSATokenServiceImpl.class);

	/* (non-Javadoc)
	 * @see com.zte.claa.infiboss.app.framework.service.apienable.ApiEnableCommonService#genApiToken(java.lang.String)
	 */
	@Override
	public String genApiToken(String userName) throws Exception {
		CSAToken token = new CSAToken();
		token.setUser(userName);
		String jsonStr = JsonUtils.toJson(token);
		logger.info("jsonStr="+jsonStr);
		String tokenStr = SecurityUtil.AES128_CBC_PKCS5Pad_Encrypt(SecurityUtil.AES128_DEF_SEED_STR, jsonStr);
		logger.info("token="+tokenStr);
		return tokenStr;
	}

	/* (non-Javadoc)
	 * @see com.zte.claa.infiboss.app.framework.service.apienable.ApiEnableCommonService#parseApiToken(java.lang.String)
	 */
	@Override
	public CSAToken parseApiToken(String tokenStr) throws Exception {
		String jsonStr = SecurityUtil.AES128_CBC_PKCS5Pad_Decrypt(SecurityUtil.AES128_DEF_SEED_STR, tokenStr);
		logger.info("jsonStr="+jsonStr);
		return JsonUtils.readValue(jsonStr, CSAToken.class);
	}

	/* (non-Javadoc)
	 * @see com.zte.claa.infiboss.app.framework.service.apienable.ApiEnableCommonService#checkToken(com.zte.claa.infiboss.app.framework.service.apienable.impl.ApiToken)
	 */
	@Override
	public void checkToken(CSAToken token) throws Exception {
		if(token == null){
			throw new Exception("令牌为空！");
		}
		long curTime = System.currentTimeMillis();
		long tokenBegTime = token.getBegTime();
		long tokenEndTime = token.getExpTime();
		if(curTime < tokenBegTime || curTime > tokenEndTime){
			// inficombo系统内部，不做token过期判断.
			// throw new Exception("令牌已过期！");
		}
		if(!CSAToken.DEFAULT_USER.equals(token.getUser())){
			throw new Exception("令牌非法！");
		}
	}
}
